package com.potenzacd.project.pojo;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;

import java.util.Date;
import java.io.Serializable;
import java.util.List;

/**
 * <p>
 * 产品信息
 * </p>
 *
 * @author Apollo
 * @since 2021-01-16
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class ProductInfo implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 主键自增
     */

    private Integer id;

    /**
     * 业务标识
     */
    @TableId(type = IdType.ASSIGN_ID)
    private String code;

    /**
     * 创建时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd hh:mm:ss")
    private Date createTime;

//    /**
//     * 是否删除, 1：删除 2：未删除
//     */
//    private Integer deleted;


    /**
     * 修改时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd hh:mm:ss")
    private Date updateTime;

    /**
     * 介绍
     */
    private String des;

    /**
     * 行业类型ID
     */
    private Integer dicIndustryId;

    /**
     * 产品信息的类型ID
     */
    private Integer dicProductInfoTypeId;

    /**
     * 产品信息的名称
     */
    private String name;

    /**
     * 基本信息状态
     * 1:草稿  2:待审核  3:审核通过  4:审核失败  5:变更中  6:变更成功  7:变更失败  8:已发布  9:已作废
     */
    private Integer status;

    /**
     * 产品业务流程信息状态
     * 1:草稿  2:待审核  3:审核通过  4:审核失败  5:变更中  6:变更成功  7:变更失败  8:已发布  9:已作废
     */
    private Integer bizFlowStatus;

    /**
     * 产品功能需求信息状态
     * 1:草稿  2:待审核  3:审核通过  4:审核失败  5:变更中  6:变更成功  7:变更失败  8:已发布  9:已作废
     */
    private Integer pdInfoReqsStatus;

    /**
     * 用户的标识
     */
    private String userCode;


    /**
     * 业务流程信息
     */
    @TableField(exist = false)
    private List<ProductInfoBizFlowInfo> productInfoBizFlowInfos;

    /**
     * 产品需求模块信息
     */
    @TableField(exist = false)
    private List<PdInfoReqsModule> pdInfoReqsModules;

    /**
     * 产品终端类型
     */
    @TableField(exist = false)
    private List<ProductInfoTerminalType> productInfoTerminalTypes;


    /**
     * 产品的监控信息
     */
    @TableField(exist = false)
    private ProductInfoMonitor productInfoMonitor;


    /**
     * 产品的常量类型
     */
    public static class Status{
        /**
         * 草稿
         */
        public static final Integer STATUS_DRAFT = 1;

        /**
         * 待审核
         */
        public static final Integer STATUS_WAIT_APPROVAL = 2;

        /**
         * 审核通过
         */
        public static final Integer STATUS_APPROVAL_PASS = 3;

        /**
         * 审核失败
         */
        public static final Integer STATUS_APPROVAL_FAIL = 4;

        /**
         * 变更待审核(变更中)
         */
        public static final Integer STATUS_CHANGING_WAIT_APPROVAL = 5;

        /**
         * 变更成功
         */
        public static final Integer STATUS_CHANGING_SUCCESS = 6;

        /**
         * 变更失败
         */
        public static final Integer STATUS_CHANGING_FAIL = 7;

        /**
         * 已发布
         */
        public static final Integer STATUS_PUBLISH = 8;

        /**
         * 作废
         */
        public static final Integer STATUS_ABORT = 9;
    }
}
